/**
 * Notes: 表白墙列表页面 (新版API)
 * Ver : WeCollege Server API 1.0.0
 * Date: 2025-01-27
 * Description: 使用新的API服务重构表白墙列表功能
 */

const pageHelper = require('../../../../../helper/page_helper.js');
const BoardBiz = require('../../../biz/board_biz_new.js');
const ProjectBiz = require('../../../biz/project_biz.js');
const PassportBiz = require('../../../../../comm/biz/passport_biz.js');

Page({

  /**
   * 页面的初始数据
   */
  data: {
    type: 'board',
    isLoad: false,
    
    // 列表数据
    dataList: {
      page: 1,
      size: 20,
      list: [],
      count: 0,
      total: 0,
      oldTotal: 0
    },
    
    // 搜索和筛选
    search: '',
    searchType: 'all',
    sortMenus: [],
    sortItems: [],
    
    // 我的筛选
    myType: '', // '我的表白', '我的点赞', '我的收藏'
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    ProjectBiz.initPage(this);
    this._onLoad(options);
  },

  /**
   * 页面加载处理
   */
  _onLoad: function (options) {
    // 处理页面参数
    if (options.search) {
      this.setData({
        search: decodeURIComponent(options.search)
      });
    }

    // 初始化搜索菜单
    this._getSearchMenu();
    
    // 加载数据
    this._loadList(true);
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () { },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    // 刷新数据
    this._loadList(true);
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () { },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () { },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: async function () {
    await this._loadList(true);
    wx.stopPullDownRefresh();
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    this._loadList(false);
  },

  /**
   * 页面跳转
   */
  url: function (e) {
    pageHelper.url(e, this);
  },

  /**
   * 我的操作菜单
   */
  bindMyTap: function (e) {
    let itemList = ['我的表白', '我的点赞', '我的收藏']; 
    wx.showActionSheet({
      itemList,
      success: async res => {
        switch (res.tapIndex) {
          case 0: {
            this._setMy(this, '我的表白');
            break;
          }
          case 1: {
            this._setMy(this, '我的点赞');
            break;
          }
          case 2: {
            this._setMy(this, '我的收藏');
            break;
          }
        }
      },
      fail: function (err) { }
    });
  },

  /**
   * 状态操作菜单
   */
  bindStatusTap: function (e) {
    let itemList = ['正常展示', '仅自己可见'];
    let id = pageHelper.dataset(e, 'id');
    wx.showActionSheet({
      itemList,
      success: async res => {
        switch (res.tapIndex) {
          case 0: { //启用 
            await this._setStatus(id, 1);
            break;
          }
          case 1: { //不展示 
            await this._setStatus(id, 0);
            break;
          }
        }
      },
      fail: function (err) { }
    });
  },

  /**
   * 点赞操作
   */
  bindLikeTap: async function (e) {
    if (!await PassportBiz.loginMustCancelWin(this)) return;
    
    const id = pageHelper.dataset(e, 'id');
    const isLike = pageHelper.dataset(e, 'like');
    
    try {
      if (isLike) {
        await BoardBiz.dislike(id);
      } else {
        await BoardBiz.like(id);
      }
      
      // 更新列表中的点赞状态
      this._updateListItemLike(id, !isLike);
      
    } catch (err) {
      console.error('点赞操作失败:', err);
      wx.showToast({
        title: '操作失败',
        icon: 'none'
      });
    }
  },

  /**
   * 搜索输入
   */
  bindSearchInput: function (e) {
    this.setData({
      search: e.detail.value
    });
  },

  /**
   * 搜索提交
   */
  bindSearchSubmit: function (e) {
    this.setData({
      search: e.detail.value
    });
    this._loadList(true);
  },

  /**
   * 筛选菜单点击
   */
  bindSortTap: function (e) {
    const { type, value } = pageHelper.dataset(e);
    
    // 更新筛选条件
    this.setData({
      searchType: type,
      sortValue: value
    });
    
    // 重新加载数据
    this._loadList(true);
  },

  /**
   * 加载列表数据
   * @param {boolean} refresh - 是否刷新
   */
  async _loadList(refresh = false) {
    try {
      const currentData = this.data.dataList;
      const page = refresh ? 1 : (currentData.page + 1);
      
      // 构建查询参数
      const params = {
        page: page,
        size: 20,
        search: this.data.search,
        searchType: this.data.searchType,
        sortValue: this.data.sortValue,
        myType: this.data.myType,
        oldTotal: currentData.oldTotal
      };

      let result;
      if (this.data.myType) {
        // 加载我的表白墙
        result = await BoardBiz.getMyList(params);
      } else {
        // 加载所有表白墙
        result = await BoardBiz.getList(params);
      }

      // 更新数据
      let newList = result.list;
      if (!refresh && page > 1) {
        newList = currentData.list.concat(result.list);
      }

      this.setData({
        dataList: {
          ...result,
          list: newList
        },
        isLoad: true
      });

    } catch (err) {
      console.error('加载列表失败:', err);
      this.setData({
        isLoad: true
      });
      
      if (refresh) {
        wx.showToast({
          title: '加载失败',
          icon: 'none'
        });
      }
    }
  },

  /**
   * 设置我的筛选
   */
  _setMy: function (that, myType) {
    that.setData({
      myType: myType,
      search: myType
    });
    that._loadList(true);
  },

  /**
   * 设置状态
   */
  async _setStatus(id, status) {
    try {
      await BoardBiz.setStatus(id, status);
      
      // 更新列表中的状态
      this._updateListItemStatus(id, status);
      
      wx.showToast({
        title: status === 1 ? '已设为正常展示' : '已设为仅自己可见',
        icon: 'success'
      });
      
    } catch (err) {
      console.error('设置状态失败:', err);
      wx.showToast({
        title: '设置失败',
        icon: 'none'
      });
    }
  },

  /**
   * 更新列表项点赞状态
   */
  _updateListItemLike: function (id, isLike) {
    const list = this.data.dataList.list;
    const index = list.findIndex(item => item.BOARD_ID === id);
    
    if (index !== -1) {
      const updatePath = `dataList.list[${index}]`;
      this.setData({
        [`${updatePath}.IS_LIKE`]: isLike,
        [`${updatePath}.BOARD_LIKE_COUNT`]: list[index].BOARD_LIKE_COUNT + (isLike ? 1 : -1)
      });
    }
  },

  /**
   * 更新列表项状态
   */
  _updateListItemStatus: function (id, status) {
    const list = this.data.dataList.list;
    const index = list.findIndex(item => item.BOARD_ID === id);
    
    if (index !== -1) {
      this.setData({
        [`dataList.list[${index}].BOARD_STATUS`]: status
      });
    }
  },

  /**
   * 获取搜索菜单
   */
  _getSearchMenu: function () {
    let sortMenus = [{ label: '全部', type: 'all', value: '' }];

    // 添加分类菜单
    if (BoardBiz.getCateList().length > 1) {
      sortMenus = sortMenus.concat(BoardBiz.getCateList());
    }

    // 添加其他筛选菜单
    sortMenus = sortMenus.concat([
      { label: '今日', type: 'today', value: '' },
      { label: '昨日', type: 'yesterday', value: '' },
      { label: '最早ˇ', type: 'sort', value: 'BOARD_ADD_TIME|asc' },
      { label: '点赞数ˇ', type: 'like', value: '' },
      { label: '评论数ˇ', type: 'comment', value: '' },
      { label: '收藏数ˇ', type: 'fav', value: '' },
    ]);

    this.setData({
      isLoad: true,
      sortItems: [],
      sortMenus
    });
  },

});